package com.sanji.capture_audio.utils

import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import androidx.core.app.NotificationCompat
import android.app.Notification
import androidx.core.app.NotificationManagerCompat

/**
 * 通知管理助手类
 * 用于创建和管理Android通知，特别是在Oreo及以上版本中创建通知渠道
 */
class NotificationHelper(private val context: Context) {
    companion object { 
        // 通知渠道ID
        private const val CHANNEL_ID = "audio_playback_channel"
        // 渠道名称
        private const val CHANNEL_NAME = "音频播放通知"
        // 渠道描述
        private const val CHANNEL_DESCRIPTION = "用于音频播放相关通知的渠道"

        // 持久通知ID
        const val NOTIFICATION_ID_PERSISTENT = 1000
        // 播放开始通知ID
        const val NOTIFICATION_ID_START = 1001
        // 播放结束通知ID
        const val NOTIFICATION_ID_END = 1002
        // 播放失败通知ID
        const val NOTIFICATION_ID_FAILED = 1003
    }
    

    // 通知管理器，懒加载获取系统通知服务
    private val notificationManager by lazy {
        context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    }

    /**
     * 初始化函数
     * 在类实例化时自动创建通知渠道
     */
    init {
        createNotificationChannel()
    }

    /**
     * 创建通知渠道（仅在Android Oreo及以上版本有效）
     * Android 8.0 (API level 26) 引入了通知渠道机制
     */
    private fun createNotificationChannel() {
        // 仅在Android O及以上版本创建通知渠道
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = NotificationChannel(
                CHANNEL_ID,
                CHANNEL_NAME,
                NotificationManager.IMPORTANCE_HIGH
            ).apply {
                description = CHANNEL_DESCRIPTION
                enableLights(true)     // 启用LED灯提醒
                enableVibration(true)  // 启用震动提醒
            }
            // 向系统注册通知渠道
            notificationManager.createNotificationChannel(channel)
        }
    }

    /**
     * 显示通知，在显示新通知前会清除所有之前的通知
     * @param title 通知标题
     * @param message 通知内容
     * @param id 通知ID，用于区分不同通知和后续取消操作
     */
    fun showNotification(title: String, message: String, id: Int) {
        // 清除所有之前的通知，确保只显示最新的通知
        // notificationManager.cancelAll()
        
        // 构建通知内容
        val builder = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(android.R.drawable.ic_dialog_info)  // 设置小图标
            .setContentTitle(title)                           // 设置标题
            .setContentText(message)                          // 设置内容文本
            .setPriority(NotificationCompat.PRIORITY_HIGH)    // 设置高优先级
            .setAutoCancel(true)                              // 点击后自动消失

        // 使用NotificationManagerCompat显示通知，确保向后兼容性
        with(NotificationManagerCompat.from(context)) {
            notify(id, builder.build())
        }
    }
    
    /**
     * 取消指定ID的通知
     * @param id 要取消的通知ID
     */
    fun cancelNotification(id: Int) {
        notificationManager.cancel(id)
    }

        /**
     * 创建持久通知用于前台服务
     * @return 构建好的通知对象
     */
    fun createPersistentNotification(): Notification {
        val builder = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(android.R.drawable.ic_dialog_info)
            .setContentTitle("通话录音播放服务运行中")
            .setContentText("正在处理通话音频...")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setOngoing(true) // 设置为持续通知，用户无法滑动删除
        
        return builder.build()
    }
}